<?php

class NotaCreditoEspecialController extends AppController {

    var $name = 'NotaCreditoEspecial';
    var $uses = array('Tienda', 'Integrador', 'Reporte', 'Postgres', 'ReporteSql', 'Logsql', 'NotaCreditoEspecial', 'Cliente', 'NotaCreditoEspecialLocal', 'TiendaLocal');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz', 'Json');
    var $layout = "ajax";
    var $components = array('Utilitario', 'Interfaz', 'Vista', 'Query', 'Maestro', 'Util');

    function beforeFilter() {
        $this->validar();
    }

    public function index($busq = null) {
        $this->permisos_menu_individual('NOTAS DE CREDITOS ESPECIALES');
        $this->set('busq', $busq);
        $condiciones = array();
        $condiciones['NotaCreditoEspecial.id >'] = '0';
        //$condiciones['NotaCreditoEspecial.estatus !='] = 1;
        $filtros = '';

        if (!empty($this->request->data))
            if (!empty($this->request->data)) {
                $filtros = $this->request->data;
                extract($filtros);
            }
        if (!empty($filtros) && isset($vent_filtro)) {
            $this->set('opciones', $this->serializador($filtros, 2));

            if (empty($tienda[0])) {
                $tiendas = $this->Session->read('tiendas_disponibles');
                $listaTiendasUsuario = $this->Maestro->listar_tienda_usuarios($tiendas);
                $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendasUsuario);
                $tiendas = array();

                foreach ($listaTiendasPermitidas as $llave => $valor) {
                    $tiendas[] = array('TiendaLocal' => array('id' => $llave));
                }
            } else {
                $tiendas = $this->TiendaLocal->find('all', array('conditions' => array('TiendaLocal.id ' => $tienda), 'fields' => array('TiendaLocal.id'), 'order' => 'TiendaLocal.codigo'));
            }
            foreach ($tiendas as $value) {
                $tienda_ids[] = $value['TiendaLocal']['id'];
            }

  
            if (!empty($tienda_ids))
                $condiciones['NotaCreditoEspecial.tienda_id'] = $tienda_ids;
            if (!empty($numero))
                $condiciones['NotaCreditoEspecial.numero ILIKE'] = "%$numero%";
            if (!empty($estatus))
                $condiciones['NotaCreditoEspecial.estatus'] = 2;
            if (!empty($tienda_id))
                $condiciones['NotaCreditoEspecial.tienda_id'] = $tienda_id;
            if (!empty($cliente_id))
                $condiciones['NotaCreditoEspecial.cliente_id'] = $cliente_id;
        }

        $data = $this->NotaCreditoEspecial->find('all', array('conditions' => $condiciones, 'order' => 'NotaCreditoEspecial.tienda_id', 'limit' => MAX_PAGI));

        $mostrar = (count($data) > MAX_PAGI) ? MAX_PAGI : count($data);
        $this->set('data', $data);
        $this->Vista->title("Listado de Notas Especiales");
        if (isset($vent_filtro))
            $this->Vista->cerrar_ventana($vent_filtro);
        $this->bloquear_buscador(2);
    }

    public function nuevo(){
        $this->permisos_accion_individual('NOTAS DE CREDITOS ESPECIALES', 'NUEVO');

        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);
    }

    public function buscar_cliente() {
    }

    public function listado_buscador_cliente($vent = null, $div = null, $para = null) {
        if (isset($para) && !empty($para)) {
            $condiciones['Cliente.id >'] = 0;
            $this->set('data', $this->Cliente->find('all', array('conditions' => array($condiciones, "OR" => array('Cliente.nombre ilike' => "%$para%", 'Cliente.documento ilike' => "%$para%")), 'order' => 'Cliente.nombre', 'LIMIT' => 500)));
            $this->set('busq', $para);
            $this->set('vent', $vent);
        } else {
            $this->set('data', null);
            $this->set('busq', '');
            $this->set('vent', $vent);
        }
        echo "<script type='text/javascript'>document.getElementById('$div').style.display='block';</script>";
        $this->set('vent', $vent);
    }

    public function actualizar_cliente($id = null, $nombre = null, $documento = null, $ventana = null) {
        $this->permisos_opcion_individual('NOTAS DE CREDITOS ESPECIALES', 'ESTATUS', 'MODIFICAR');
        $data = $this->request->data;
        extract($data);
        $id = $this->Interfaz->id($id);
        $nombre = $this->Interfaz->id($nombre);
        $documento = $this->Interfaz->id($documento);
        $valores= 'DOCUMENTO: '.$documento.' '.'NOMBRE: '.$nombre;
        echo "<script type='text/javascript'>
            id='$id';
            valor= '$valores';
            if(document.getElementById('cliente_id')!=null)
                document.getElementById('cliente_id').value=id;
            if(document.getElementById('datos_cliente')!=null)
                document.getElementById('datos_cliente').value=valor;</script>";
        $this->Vista->cerrar_ventana($ventana);
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

    public function guardar($vent = null) {
        $data = $this->request->data;
        if (!$this->Vista->empyt($data)) {
            extract($data);
            $this->NotaCreditoEspecial->query('BEGIN WORK');
            $d['NotaCreditoEspecial']['usuario_id'] = $this->Interfaz->id($this->Session->read('usuario_id'));
            $d['NotaCreditoEspecial']['cliente_id'] = $cliente_id;
            $d['NotaCreditoEspecial']['tienda_id'] = $tienda_id; 
            $d['NotaCreditoEspecial']['monto'] = $this->Interfaz->miles_postgres($monto);
            $d['NotaCreditoEspecial']['observacion'] = $this->Interfaz->mayuscula($observacion);
            if ($this->NotaCreditoEspecial->save($d)) {
                
                $idActual=$this->NotaCreditoEspecial->id; 
                $sql = "select fn_numero_nota_credito_especial('$idActual') as resultado;";
                $numero = $this->NotaCreditoEspecial->query($sql);
                $resultado = explode('|',$numero[0][0]['resultado']);
                if($resultado[0]) {
                    $datosNota = $this->NotaCreditoEspecial->find('first', array('fields' => 'NotaCreditoEspecial.id, NotaCreditoEspecial.usuario_id, NotaCreditoEspecial.cliente_id, NotaCreditoEspecial.tienda_id, NotaCreditoEspecial.monto, NotaCreditoEspecial.observacion', 'conditions' => array('NotaCreditoEspecial.id' => $idActual)));
                    $numeroLocal=$resultado[1];
                    $t['NotaCreditoEspecialLocal']['id_maestro'] = $datosNota['NotaCreditoEspecial']['id'];
                    $t['NotaCreditoEspecialLocal']['usuario_id'] = $datosNota['NotaCreditoEspecial']['usuario_id'];
                    $t['NotaCreditoEspecialLocal']['cliente_id'] = $datosNota['NotaCreditoEspecial']['cliente_id']; 
                    $t['NotaCreditoEspecialLocal']['tienda_id'] = $datosNota['NotaCreditoEspecial']['tienda_id'];
                    $t['NotaCreditoEspecialLocal']['monto'] = $datosNota['NotaCreditoEspecial']['monto'];
                    $t['NotaCreditoEspecialLocal']['observacion'] = $datosNota['NotaCreditoEspecial']['observacion'];
                    $t['NotaCreditoEspecialLocal']['numero'] = $numeroLocal;

                    $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $tienda_id)));
                    $ObjNotaCreditoEspecialLocal = $this->Maestro->modelo('punto', 'NotaCreditoEspecialLocal', $BdPunto['TiendaLocal']['base_datos']);

                        if ($ObjNotaCreditoEspecialLocal->save($t)) {             
                            $this->Vista->mensaje("Guardado Exitosamente!!!", 'EXITO');
                            $this->NotaCreditoEspecial->query('COMMIT');
                            $this->Vista->cerrar_ventana($ventana_nuevo);
                            $this->log();
                        }

                }
                else {
                    $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                    $this->NotaCreditoEspecial->query('ROLLBACK');
                } 

            } else {
                $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                $this->NotaCreditoEspecial->query('ROLLBACK');
            }
        }
        $this->index();
        $this->render('index');
    }

    public function ver($id = null){
        $this->permisos_opcion_individual('NOTAS DE CREDITOS ESPECIALES', 'ESTATUS', 'VER');
        $id = $this->Interfaz->id($id);
        $data = $this->NotaCreditoEspecial->find('first', array('conditions' => array('NotaCreditoEspecial.id' => $id))); 
        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $this->set('data', $data); 
        $this->set('listaTiendas', $listaTiendas);
    }

    public function modificar($id = null) {
        $this->permisos_opcion_individual('NOTAS DE CREDITOS ESPECIALES', 'ESTATUS', 'MODIFICAR');
        $data = $this->request->data;

        if (!empty($data)) {
            if (!$this->Vista->empyt($data)) {

                extract($data);
                
                $this->NotaCreditoEspecial->query('BEGIN WORK');
                $id = $this->Interfaz->id($nota_id);
                $tienda_ids= $this->Interfaz->id($tienda_ids);
                $maestro['NotaCreditoEspecial']['id'] = $id;
                $maestro['NotaCreditoEspecial']['cliente_id'] = $cliente_id;
                $maestro['NotaCreditoEspecial']['monto'] = $this->Interfaz->miles_postgres($monto);
                $maestro['NotaCreditoEspecial']['observacion'] = $this->Utilitario->mayuscula($observacion);
          
                if ($this->NotaCreditoEspecial->save($maestro)) {
                    
                    $idActual=$this->NotaCreditoEspecial->id; 

                    $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $tienda_ids)));
                    $ObjNotaCreditoEspecialLocal = $this->Maestro->modelo('punto', 'NotaCreditoEspecialLocal', $BdPunto['TiendaLocal']['base_datos']);
                    $datosLocal=$ObjNotaCreditoEspecialLocal->find('first', array('conditions' => array('NotaCreditoEspecialLocal.id_maestro' => $idActual)));

                    $local['NotaCreditoEspecialLocal']['id'] = $datosLocal['NotaCreditoEspecialLocal']['id'];
                    $local['NotaCreditoEspecialLocal']['cliente_id'] = $cliente_id; 
                    $local['NotaCreditoEspecialLocal']['monto'] = $this->Interfaz->miles_postgres($monto);
                    $local['NotaCreditoEspecialLocal']['observacion'] = $this->Utilitario->mayuscula($observacion);    

                    if ($ObjNotaCreditoEspecialLocal->save($local)) {             
                        $this->Vista->mensaje("Guardado Exitosamente!!!", 'EXITO');
                        $this->NotaCreditoEspecial->query('COMMIT');
                        $this->Vista->cerrar_ventana($ventana_modificar);
                        $this->log();
                    }
                    else {
                            $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                            $this->NotaCreditoEspecial->query('ROLLBACK');
                    } 

                } else {
                    $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                    $this->NotaCreditoEspecial->query('ROLLBACK');
                }
            }
            else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->index();
            $this->render('index');
        }
        else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) { 
                $valores = $this->NotaCreditoEspecial->find('first', array('conditions' => array('NotaCreditoEspecial.id' => $id))); 
                $tiendas = $this->Session->read('tiendas_disponibles');
                $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
                $this->set('data', $valores); 
                $this->set('listaTiendas', $listaTiendas);
            } else {
                $this->Vista->mensaje("Nota de Credito Especial Inv&aacute;lida", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }

    }


    public function anular($id = null, $tienda_ids = null) {
        $this->permisos_opcion_individual('NOTAS DE CREDITOS ESPECIALES', 'ESTATUS', 'ANULAR');

        if (!empty($id)) {

            $this->NotaCreditoEspecial->query('BEGIN WORK');
            $id = $this->Interfaz->id($id);

            $tienda_ids= $this->Interfaz->id($tienda_ids);
            $maestro['NotaCreditoEspecial']['id'] = $id;
            $maestro['NotaCreditoEspecial']['estatus'] = 4;
      
            if ($this->NotaCreditoEspecial->save($maestro)) {
                
                $idActual=$this->NotaCreditoEspecial->id; 

                $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $tienda_ids)));
                $ObjNotaCreditoEspecialLocal = $this->Maestro->modelo('punto', 'NotaCreditoEspecialLocal', $BdPunto['TiendaLocal']['base_datos']);
                $datosLocal=$ObjNotaCreditoEspecialLocal->find('first', array('conditions' => array('NotaCreditoEspecialLocal.id_maestro' => $idActual)));

                $local['NotaCreditoEspecialLocal']['id'] = $datosLocal['NotaCreditoEspecialLocal']['id'];
                $local['NotaCreditoEspecialLocal']['estatus'] = 4; 

                if ($ObjNotaCreditoEspecialLocal->save($local)) {             
                    $this->Vista->mensaje("Anulado Exitosamente!!!", 'EXITO');
                    $this->NotaCreditoEspecial->query('COMMIT');
                    $this->log();
                }
                else {
                        $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                        $this->NotaCreditoEspecial->query('ROLLBACK');
                } 

            } else {
                $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                $this->NotaCreditoEspecial->query('ROLLBACK');
            }

    
        }
        else {
                $this->Vista->mensaje("Nota de Credito Especial Inv&aacute;lida", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
        }
        $this->index();
        $this->render('index');
    }

    public function filtro() {
        $this->permisos_accion_individual('NOTAS DE CREDITOS ESPECIALES', 'FILTRO');
         $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);
    }


    public function reporte_excel($formato = 1, $b = 1, $busq = null) {
        if($formato==1){        
            $this->permisos_accion_individual('NOTAS DE CREDITOS ESPECIALES', 'EXCEL');
        }else{
            $this->permisos_accion_individual('NOTAS DE CREDITOS ESPECIALES', 'CAL');
        }

        $condiciones['NotaCreditoEspecial.id >'] = '0';
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : '';
        if (!empty($busq)) {
            if ($b == 2) {
                $dataSerializada = $this->serializador($busq, 1); //1 convierte la cadena serializada en un arreglo
                if (is_array($dataSerializada)) {
                    extract($dataSerializada);

                    if (empty($tienda[0])) {
                        $tiendas = $this->Tienda->find('all', array('conditions' => array('Tienda.id > ' => 0), 'fields' => array('Tienda.id'), 'order' => 'Tienda.codigo'));
                    } else {
                        $tiendas = $this->Tienda->find('all', array('conditions' => array('Tienda.id ' => $tienda), 'fields' => array('Tienda.id'), 'order' => 'Tienda.codigo'));
                    }
                    foreach ($tiendas as $value) {
                        $tienda_ids[] = $value['Tienda']['id'];
                    }

                    if (!empty($tienda_ids))
                        $condi['MovimientoDetalle.tienda_ids'] = $tienda_ids;
                    if (!empty($numero))
                        $condiciones['NotaCreditoEspecial.numero ILIKE'] = "%$numero%";
                    if (!empty($estatus))
                        $condiciones['NotaCreditoEspecial.estatus'] = 2;
                    if (!empty($tienda_id))
                        $condiciones['NotaCreditoEspecial.tienda_id'] = $tienda_id;
                    if (!empty($cliente_id))
                        $condiciones['NotaCreditoEspecial.cliente_id'] = $cliente_id;

                    $data = $this->NotaCreditoEspecial->find('all', array('conditions' => $condiciones, 'order' => 'NotaCreditoEspecial.tienda_id', 'limit' => 15000));
                    $this->set('data', $data);

                }
            }
            else
                $this->_principal_buscador_reporte('NotaCreditoEspecial', $busq);
        } else {
            $data = $this->NotaCreditoEspecial->find('all', array('conditions' => $condiciones, 'order' => 'NotaCreditoEspecial.tienda_id'));
            $this->set('data', $data);
        }
        $this->set('formato', $formato);
        $this->set('busq', null);


    
    }

} //class
?>
